//
//  LPFEmoticonTools.swift
//  WeiBo
//
//  Created by mac on 16/4/25.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit

// 最多显示的列数
let LPFEmoticonMaxCol = 7
// 最多显示的行数
let LPFEmoticonMaxRow = 3
// 最多显示的表情个数
let LPFEmoticonMaxCount = LPFEmoticonMaxCol * LPFEmoticonMaxRow - 1

class LPFEmoticonTools: NSObject {

    // 全局访问点
    static let sharedTools: LPFEmoticonTools = LPFEmoticonTools()
    
    // 读取表情bundle文件
    lazy var emoticonBundle: NSBundle = {
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        
        return NSBundle(path: path)!
    }()
    
    // MARK: - 默认表情
    lazy var defaultEmoticon: [LPFEmoticonModel] = {
        return self.getEmoticons("default/")
    }()
    // MARK: - Emoji表情
    lazy var emojiEmoticon:[LPFEmoticonModel] = {
        return self.getEmoticons("emoji/")
        }()
    
    // MARK: - 浪小花表情
    lazy var lxhEmoticon:[LPFEmoticonModel] = {
        return self.getEmoticons("lxh/")
        }()
    
    
    
    // MARK: - 获取表情模型一维数组  分类
    func getEmoticons(path: String) -> [LPFEmoticonModel]{
        let file = emoticonBundle.pathForResource("\(path)info.plist", ofType: nil)!
        // 通过路径得到plist文件的数组
        let array = NSArray(contentsOfFile: file)!
        // 定义一个临时数组保存我们的模型数据
        var tempArray: [LPFEmoticonModel] = [LPFEmoticonModel]()
        
        //  遍历数组 字典转模型
        for dict in array{
            let emoticon = LPFEmoticonModel(dict: dict as! [String: AnyObject])
            
            // 设置全路径
            emoticon.path = path
            
            tempArray.append(emoticon)
        }
        return tempArray
    }
    
    // MARK: - 把一维数组截取成二维数组  每一类包装成数组
    func getEmoticonGroup(emoticon: [LPFEmoticonModel]) -> [[LPFEmoticonModel]]{
        // 计算我们的表情有多少页
        let pageCount = (emoticon.count + LPFEmoticonMaxCount - 1) / LPFEmoticonMaxCount
        // 定义一个临时数组保存一维数组数据
        var tempArray: [[LPFEmoticonModel]] = [[LPFEmoticonModel]]()
        for index in 0..<pageCount{
            // 位置(100)
            let loc = index * LPFEmoticonMaxCount
            // 长度
            var len = LPFEmoticonMaxCount
            // 因为我们的默认表情有108个 会越界
            if loc + len > emoticon.count{
                len = emoticon.count - loc
            }
            // range
            let range = NSMakeRange(loc, len)
            
            // 截取数组
            let emoticons = (emoticon as NSArray).subarrayWithRange(range) as! [LPFEmoticonModel]
            
            // 添加一维数组
            tempArray.append(emoticons)
        }
        return tempArray
    }
    
    // MARK: - emoticon三维表情数组
    lazy var allEmoticons: [[[LPFEmoticonModel]]] = {
        return [
            self.getEmoticonGroup(self.defaultEmoticon),
            self.getEmoticonGroup(self.emojiEmoticon),
            self.getEmoticonGroup(self.lxhEmoticon)]
        }()
    
    // MARK: -  供外界调用判断chs 是否和我们本地的相同  -- > 返回对象的emoticon
    func getEmoticonWithChs(chs: String) -> LPFEmoticonModel?{
        // 判断我们传进来的图片描述是否包含在我们默认表情中
        for emoticon in defaultEmoticon{
            if emoticon.chs == chs{
                return emoticon
            }
        }
        // 判断我们传进来的图片描述是否包含在我们浪小花表情中
        for emoticon in lxhEmoticon{
            if emoticon.chs == chs{
                return emoticon
            }
        }
        
        // 如果找不到对象的chs  就返回一个nil
        return nil
    }
}
